package com.xbongbong.pro.statistic.service;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.domain.entity.ChartEntity;
import com.xbongbong.pro.statistic.enums.PanoramaEnum;
import com.xbongbong.pro.statistic.enums.ReturnTypeEnum;
import com.xbongbong.pro.statistic.enums.SystemCodeEnum;
import com.xbongbong.pro.statistic.result.pojo.ChartResultPkPojo;
import com.xbongbong.pro.statistic.result.pojo.ChartResultPojo;
import com.xbongbong.pro.statistic.result.pojo.PanoramaPojo;
import com.xbongbong.pro.statistic.result.pojo.vo.ChartResultDetailVO;
import com.xbongbong.saas.enums.XbbRefTypeEnum;
import com.xbongbong.sys.domain.entity.UserEntity;

import java.util.List;
import java.util.Map;

/**
 * 图表结果增强Service
 *
 * @author LiZhikang
 * @date 2022/11/19 14:29
 */
public interface ChartResultProService {

    /**
     * 业务类型
     *
     * @return
     */
    List<Integer> businessType();

    /**
     * 获取系统指标的统计结果
     *
     * @param returnTypeEnum      返回值类型枚举，如果为VALUE_RETURN，则为统计数值型;如果不为数值型，则传其他值即可
     * @param xbbRefTypeEnum      业务类型
     * @param chartResultPojo     请求系统指标接口需要用到的pojo类（内部存系统指标统计时需要的参数）
     * @param chartResultDetailVO 统计需要渲染的图（表---可能同时存在，可能某一个存在）塞入该vo
     * @return java.lang.Object
     * @throws XbbException
     * @author zcp
     * @date 2019/2/14 11:07
     * @version v1.0
     * @since v1.0
     */
    Object getResult4System(ReturnTypeEnum returnTypeEnum, XbbRefTypeEnum xbbRefTypeEnum, ChartResultPojo chartResultPojo, ChartResultDetailVO chartResultDetailVO) throws XbbException;

    /**
     * 获取pk榜统计结果
     *
     * @param userEntity        登录员工
     * @param xbbRefTypeEnum    业务类型
     * @param chartResultPkPojo pk参数
     * @return java.lang.Object
     * @throws XbbException
     * @author zcp
     * @date 2019/3/18 19:57
     * @version v1.0
     * @since v1.0
     */
    Object getResult4Pk(UserEntity userEntity, XbbRefTypeEnum xbbRefTypeEnum, ChartResultPkPojo chartResultPkPojo) throws XbbException;

    /**
     * 获取pk榜统计结果
     *
     * @param userEntity        登录员工
     * @param xbbRefTypeEnum    业务类型
     * @param chartResultPkPojo pk参数
     * @return java.lang.Object
     * @throws XbbException
     * @author zcp
     * @date 2019/3/18 19:57
     * @version v1.0
     * @since v1.0
     */
    Object getResult4PkRule(UserEntity userEntity, ChartEntity chartEntity, XbbRefTypeEnum xbbRefTypeEnum, ChartResultPkPojo chartResultPkPojo) throws XbbException;

    /**
     * 获取系统指标统计结果（数值型）
     *
     * @param systemCodeEnumList 要计算结果的系统指标枚举
     * @param chartResultPojo    统计请求参数pojo
     * @return java.util.Map<com.xbongbong.pro.statistic.enums.SystemCodeEnum, java.lang.String>
     * @throws XbbException
     * @author zcp
     * @date 2019/4/17 13:55
     * @version v1.0
     * @since v1.0
     */
    Map<SystemCodeEnum, String> getResult4SystemValue(List<SystemCodeEnum> systemCodeEnumList, ChartResultPojo chartResultPojo) throws XbbException;

    /**
     * 获取全景指标统计结果
     *
     * @param xbbRefTypeEnum 业务类型
     * @param panoramaPojo   全景指标请求参数pojo
     * @param panoramaEnum   全景指标枚举
     * @return java.lang.Object
     * @throws XbbException
     * @author zcp
     * @date 2019/6/3 11:20
     * @version v1.0
     * @since v1.0
     */
    Object getResult4Panorama(XbbRefTypeEnum xbbRefTypeEnum, PanoramaPojo panoramaPojo, PanoramaEnum panoramaEnum) throws XbbException;
}
